package com.xian;

import java.util.Random;
import java.util.Scanner;

/**
 * 模拟双色球[拓展案例]
 * 业务分析、随机生成一组中奖号码
 * 用户输入一组双色球号码
 * 判断中奖情况
 * <p>
 * 投注号码由6个红色球号码和1个蓝色球号码组成。
 * 红色球号码从1—33中选择﹔蓝色球号码从1—16中选择。
 */
public class Test7 {
    public static void main(String[] args) {

        int[] luckNumbers = createLuckNumbers();

        int[] userNumbers = userInputNumbers();

        judge(luckNumbers, userNumbers);

    }

    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
        }
        System.out.println("]");
    }

    //1、随机一组中奖号码返回
    /*
    随机一组中奖号码的分析:
    中奖号码由6个红球和1个篮球组成(注意:6个红球要求不能重复)。
    可以定义方法用于返回一组中奖号码(7个数据)，返回的形式是一个整型数组。
    * */
    public static int[] createLuckNumbers() {
        //a.定义一个动态数组，，存储7个数字
        int[] nums = new int[7];
        Random r = new Random();

        //b.遍历数组，生成对应号码，（注意：遍历前6个位置，生成6个不重复红球1-33）
        for (int i = 0; i < nums.length - 1; i++) {
            //为当前位置找出一个不重复的1-33之间的数字
            while (true) {
                int data = r.nextInt(33) + 1; //1-33  (0-32) + 1
                //c.注意：必须判断当前号码是否重复，，若重复重新随机一个，直到没有重复
                // 定义一个flag变量，默认为data没有重复
                boolean flag = true;
                for (int j = 0; j < i; j++) {
                    if (nums[j] == data) {
                        // data出现过不能用
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    //data没有出现
                    nums[i] = data;
                    break;
                }
            }
        }

        //d.为第七个位置生成一个1-16的号码作为蓝球号码
        nums[nums.length - 1] = r.nextInt(16) + 1;
        return nums;
    }


    // 2、用户输入一组双色球号码返回
    /*
    用户输入一组双色球号码分析:
    定义一个方法，该方法可以录入用户输入的6个红球和1个篮球号码
    该方法最终需要返回一个数组，数组中就是用户录入的号码（7位)。
    * */
    public static int[] userInputNumbers() {

        int[] nums = new int[7];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < nums.length - 1; i++) {
            System.out.println("请输入第" + (i + 1) + "个红球号码(1-33)不重复:");
            int data = sc.nextInt();
            nums[i] = data;
        }

        System.out.println("请输入蓝球号码（1-16）：");
        nums[6] = sc.nextInt();
        return nums;
    }


    //3、传入2组号码，判断用户中奖情况
    /*
    中奖情况判断的分析:
    定义一个方法，可以接收中奖号码的数组，用户选号的数组。
    根据命中红球数和篮球数判断最终的中奖情况并输出详情和中奖金额。
    */
    public static void judge(int[] luckNumbers, int[] userNumbers) {
        //红球中了几个，蓝球有没有中

        //1.定义两个变量存储命中红球个数，蓝球个数
        int redCount = 0;
        int blueCount = 0;

        //2.判断红球中了几个
        for (int i = 0; i < userNumbers.length - 1; i++) {
            for (int j = 0; j < luckNumbers.length - 1; j++) {
                //每次找到相等就中了
                if (userNumbers[i] == luckNumbers[j]) {
                    redCount++;
                    break;
                }
            }
        }

        //3.蓝球号码命中
        blueCount = luckNumbers[6] == userNumbers[6] ? 1 : 0;

        System.out.println("中奖号码是:");
        printArray(luckNumbers);
        System.out.println("您投注号码是:");
        printArray(userNumbers);
        System.out.println("您命中了" + redCount + "个红球");
        System.out.println("您是否命中蓝球:" + (blueCount == 1 ? "是" : "否"));


        //4.判断中奖情况
        if (blueCount == 1 && redCount < 3) {
            System.out.println("恭喜，中了5元!!!");
        } else if (blueCount == 1 && redCount == 3 || blueCount == 0 && redCount == 4) {
            System.out.println("恭喜，中了10元!!!");
        } else if (blueCount == 1 && redCount == 4 || blueCount == 0 && redCount == 5) {
            System.out.println("恭喜，中了200元!!!");
        } else if (blueCount == 1 && redCount == 5) {
            System.out.println("恭喜，中了3000元!!!");
        } else if (blueCount == 0 && redCount == 6) {
            System.out.println("恭喜，中了500万元超级大奖!!!");
        } else if (blueCount == 1 && redCount == 6) {
            System.out.println("恭喜，中了1000万元超级大奖,开始享受人生!!!");
        } else {
            System.out.println("很遗憾，没中奖！！！");
        }
    }

}
